package br.com.jvet.mb;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import org.primefaces.event.CloseEvent;

import br.com.jvet.constante.Perfil;
import br.com.jvet.constante.StatusPedido;
import br.com.jvet.entidade.ItemPedidoCompra;
import br.com.jvet.entidade.Movimentacao;
import br.com.jvet.infra.ItemPedidoCompraFacade;
import br.com.jvet.infra.ProdutoFacade;
import br.com.jvet.util.CommomUtils;
import br.com.jvet.util.Handler;

@ManagedBean(name = "recebimentoPedidoCompraMB")
@SessionScoped
public class RecebimentoPedidoCompraMB implements Handler, Serializable {

	private static final long serialVersionUID = 6407830444186096553L;
	private final String RETORNO_PAGINA_RECEBER = "/paginas/recebimentoPedidoCompra/recebimentoPedidoCompra.jsf?faces-redirect=true";
	@EJB
	private ProdutoFacade produtoFacade;
	@EJB
	private ItemPedidoCompraFacade itemPedidoCompraFacade;
	private List<ItemPedidoCompra> listaItens;
	private ItemPedidoCompra itemPedido;

	public RecebimentoPedidoCompraMB() {
		super();
	}

	public String showReceber() {
		limpar();
		criarInstacias();
		listarItens();
		return RETORNO_PAGINA_RECEBER;
	}

	public void criarInstacias() {
		setListaItens(new ArrayList<ItemPedidoCompra>());
		itemPedido = new ItemPedidoCompra();
		FACES.setHeader("Recebimento Itens de Pedido Compra");

	}

	public void abrirModalConsulta(ItemPedidoCompra item) {

		try {

			itemPedido = item.clone();

		} catch (Exception e) {

			FACES.setErrorMessage(e);
		}

	}

	public void abrirModalRecebe(ItemPedidoCompra item) {
		itemPedido = item.clone();
		itemPedido.setDataRecebimento(new Date());
		int totalRecebido = 0;
		for (Movimentacao mov : item.getMovimentacoes()) {
			totalRecebido += mov.getQuantidade();
		}
		itemPedido.setTotalRecebido(totalRecebido);
		itemPedido.setQtdRecebida(itemPedido.getQuantidade()-totalRecebido);
	}

	public void closeItem(CloseEvent event) {
		FACES.limparCampos(event.getComponent());
	}

	public void receberItem(ActionEvent event) {

		try {
			double totalRecebimento = getItemPedido().getQtdRecebida()
					+ getItemPedido().getTotalRecebido();
		
			if (totalRecebimento == itemPedido.getQuantidade()) {
				getItemPedido().setStatus(StatusPedido.RECEBIDO);
			} else {
				getItemPedido().setStatus(StatusPedido.PARCIAL);
			}
			itemPedidoCompraFacade.updateQtdRecebimento(getItemPedido());
			listarItens();
			FACES.setSucessoMessage("Recebimento de Item de Pedido: ",
					"Item recebido com sucesso!");
		} catch (Exception e) {
			FACES.setErrorMessage(e);
		}
	}

	@Override
	public String sair() {
		limpar();
		return FACES.getHOME();
	}

	public void limpar() {

		setListaItens(null);
		setItemPedido(null);

	}

	@PostConstruct
	public void listarItens() {
		listaItens = itemPedidoCompraFacade
				.buscarItensRecebimento(StatusPedido.RECEBIDO);
	}

	public ItemPedidoCompra getItemPedido() {
		return itemPedido;
	}

	public void setItemPedido(ItemPedidoCompra itemPedido) {
		this.itemPedido = itemPedido;
	}

	public List<SelectItem> getListaStatus() {
		return CommomUtils.EnumToListSelectItemTodos(StatusPedido.class);
	}

	public List<ItemPedidoCompra> getListaItens() {
		return listaItens;
	}

	public void setListaItens(List<ItemPedidoCompra> listaItens) {
		this.listaItens = listaItens;
	}

	public String getHeader() {
		FACES.setHeader("Pedido de Compra");
		return FACES.getHeader();
	}

	public boolean verificaPermissaoCadastro() {
		if (LoginMB.getUsuarioCorrente().getPerfil() == Perfil.FUNCIONARIO
				|| LoginMB.getUsuarioCorrente().getPerfil() == Perfil.ADMIN) {
			return true;
		}
		return false;
	}

}
